<?php

namespace App\Models;

class Article extends Base
{
    //给模型追加字段 追加字段一定要有 访问器配置
    protected $appends=['action','pic_url'];
    //访问器 get字段名首字母大写Attribute
    public function getActionAttribute()
    {
        $html=$this->editBtn('admin.article.edit','修改',$this);
        $html .=" ".$this->delBtn("admin.article.destroy","删除",$this);
        return $html;
    }
    //用于接口返回图片地址
    public function getPicUrlAttribute(){
        return $this->domain.$this->pic;
    }
    // 内容访问器，把内容地址传为http地址
    public function getBodyAttribute() {
        // 正则匹配
        // i 不区分大小写
        // U 禁止贪婪匹配
        // s 忽略换行，一般用于html中的正则一定要写的
        $preg = '#src="(.*)"#iUs';
        // 获取对应模型中的数据
        $body = $this->attributes['body'];
        // 让转义的\去除  转义符对于正则是有很大的影响，不去除，匹配的不准确
        $html = str_replace('\\', '', $body);
        $domain=$this->domain;
        // 正则的替换
        $html = preg_replace_callback($preg, function($match)use($domain){
            if (stristr($match[1], 'http://')) {
                return 'src="' . $match[1] . '"';
            }
            return 'src="' . $domain . $match[1] . '"';
        },$html);
        return $html;
    }
    //文章列表
    public function getList($request){
        //排序
        $order=$request->get('order')[0];
        //排序字段索引值
        $column=$order['column'];
        //排序方式
        $dir=$order['dir'];
        //排序字段
        $field=$request->get('columns')[$column]['data'];
        //搜索功能
        //日期
        $datemin = $request->get('datemin');
        $datemax = $request->get('datemax');
        //账号
        $title = $request->get('title');
        //分页获取数据
        $builer = self::when($datemin, function ($query) use ($datemin) {
            $datemin = date('Y-m-d 00:00:00', strtotime($datemin));
            $query->where('created_at', '>=', $datemin);
        })->when($datemax, function ($query) use ($datemax) {
            $datemax = date('Y-m-d 23:59:59', strtotime($datemax));
            $query->where('created_at', '<', $datemax);
        })->when($title, function ($query) use ($title) {
            $query->where('title', 'like', "%{$title}%");
        });
        //记录总数
        $count=$builer->count();
        //分页
        $offset=$request->get('start');
        $limit=$request->get('length');
        $data=$builer->orderBy($field,$dir)->offset($offset)->limit($limit)->get();
        return [
            'draw'=>$request->get('draw'),
            'recordsTotal'=>$count,
            'recordsFiltered'=>$count,
            'data'=>$data
        ];
    }
}
